//评论的schema
//引入mongoose模块
var mongoose = require('mongoose')
//引入Schema模块
var Schema = mongoose.Schema
//引入Schema中的ObjectId类型
var ObjectId = Schema.Types.ObjectId
//创建CommentSchema这个Schema
var CommentSchema = new mongoose.Schema({
  //user字段，类型为ID，属于User的Schema的外键
	user:{
		type:ObjectId,
		ref:'User'
	},
  //post字段，类型为ID,属于Post的Schema的外键
	post:{
		type:ObjectId,
		ref:'Post'
	},
  //评论内容，类型为String
	content:String,

	//点赞数
	thumbsUpCount:{
		type:Number,
		default:0
	},
	//楼数
	buildingNum:Number,

	meta:{
    //创建时间
		createAt:{
			type:Date,
      //默认值为当前时间
			default:Date.now()
		},
    //更新时间
		updateAt:{
			type:Date,
      //默认值为当前时间
			default:Date.now()
		}
	}

})

//CommentSchema保存前调用的方法
CommentSchema.pre('save',function(next){
  //如果是新创建的
	if(this.isNew){
    //初始化创建时间和更新时间都为当前时间
		this.meta.createAt = this.meta.updateAt = Date.now()
    //调用后面的内容
		next()
	}else{
    //若不是新创建的，则更改更新时间为当前时间
		this.meta.updateAt = Date.now()
    //调用后面的内容
		next()
	}
})
//CommentSchema的一些静态方法
CommentSchema.statics = {
  //通过Id获取comment对象
	getById:function(id,cb){
    //通过id找到这个唯一的元素
		return this.findOne({_id:id}).exec(cb)
	},
  //通过post的id获取comment对象
	getByPostId:function(id,cb){
    //通过post的id查询结果，并将其中的user和post的外键id替换成其对象，按照创建时间倒序排序
		return this.find({post:id}).populate('user post','-_id').sort('-meta.createAt').exec(cb)
	},
  //通过post的id获取评论数
	getCountByPostId : function(id,cb){
    //返回该评论数
		return this.count({post:id},cb)
	},
  //通过post的id获取最后一条评论数据
	getLastCommentByPostId : function(id,cb){
    //按时间倒序排序，获取最后一条数据
		return this.findOne({post:id}).populate('user','-_id').sort('-meta.createAt').exec(cb)
	}
}
//导出CommentSchema模块
module.exports = CommentSchema


